#include <pybind11/pybind11.h>
namespace py = pybind11;

void initGeometryModule(py::module &);
void initDataCoreModule(py::module &);
void initDisplayModule(py::module &);
void initDynamicsModule(py::module &);
void initSceneGraphModule(py::module &);
void initUtilitiesModule(py::module &);

//define entrant module named as PyPhysLeo
PYBIND11_MODULE(PyPhysLeo, m)
{
    m.doc() = "python module for PhysLeo C++ lib";

    //disable auto function signature
    py::options options;
    options.disable_function_signatures();
    

    //definition for submodules
    py::module mod_data_core = m.def_submodule("data_core");
    py::module mod_geometry = m.def_submodule("geometry");
    py::module mod_display = m.def_submodule("display");
    py::module mod_dynamics = m.def_submodule("dynamics");
    py::module mod_scene_graph = m.def_submodule("scene_graph");
    py::module mod_utilities = m.def_submodule("utilities");

    //initialize submodules
    initGeometryModule(mod_geometry);
    initDataCoreModule(mod_data_core);
    initDisplayModule(mod_display);
    initDynamicsModule(mod_dynamics);
    initSceneGraphModule(mod_scene_graph);
    initUtilitiesModule(mod_utilities);
}